import dayjs from "dayjs";
import isSameOrBefore from "dayjs/plugin/isSameOrBefore";
import isSameOrAfter from "dayjs/plugin/isSameOrAfter";

// 扩展 dayjs 插件
dayjs.extend(isSameOrBefore);
dayjs.extend(isSameOrAfter);

/**
 * 将任意时间格式转换为毫秒时间戳
 * @param {string|number|Date} input - 输入的时间（可以是时间戳、日期字符串或Date对象）
 * @returns {number} 毫秒时间戳
 */
export function toTimestamp(input: any): number {
  // 如果输入已经是数字时间戳
  if (typeof input === "number") {
    // 检查是否是秒级时间戳（10位）
    if (input.toString().length === 10) {
      return input * 1000;
    }
    // 检查是否是毫秒级时间戳（13位）
    if (input.toString().length === 13) {
      return input;
    }
  }

  // 处理字符串或Date对象
  return dayjs(input).valueOf();
}

/**
 * 将时间转换为用户友好的格式
 * @param input 时间输入（支持字符串、Date、时间戳、dayjs 对象）
 * @param defaultValue 默认显示内容
 * @returns 格式化后的字符串，例如："今天 12:30"、"昨天 08:15"、"03-10 12:33"、"2024-12-10"
 */
export function formatFriendlyDate(
  input: dayjs.ConfigType,
  defaultValue = "-"
): string {
  const date = dayjs(input);
  if (!date.isValid()) return defaultValue; // 处理无效输入

  const today = dayjs().startOf("day");
  const targetDate = date.startOf("day");

  // 判断时间区间
  if (targetDate.isSame(today)) {
    return `今天 ${date.format("HH:mm")}`;
  } else if (targetDate.isSame(today.subtract(1, "day"))) {
    return `昨天 ${date.format("HH:mm")}`;
  } else if (targetDate.isAfter(today.subtract(7, "day"))) {
    // 过去一周内显示星期几
    const weekdays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
    return `${weekdays[date.day()]} ${date.format("HH:mm")}`;
  } else if (date.year() === dayjs().year()) {
    // 今年内显示月日+时间
    return date.format("MM-DD HH:mm");
  } else {
    // 跨年显示完整日期
    return date.format("YYYY-MM-DD");
  }
}

// 使用示例
// console.log(formatFriendlyDate(new Date()));             // 今天 + 时间
// console.log(formatFriendlyDate(Date.now() - 86400000));  // 昨天 + 时间
// console.log(formatFriendlyDate('2024-03-15 12:30'));     // 周五 12:30（假设当前为2024-03-20）
// console.log(formatFriendlyDate('2023-12-10 12:33'));    // 2023-12-10
